home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 4
/
Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso
/
Pearls
/
dev
/
Oberon
/
OberonV4
/
system
/
AmigaDiskFont.Mod
(
.txt
)
< prev
next >
Wrap
Oberon Text
|
1994-06-23
|
4KB
|
97 lines
Syntax10.Scn.Fnt
Syntax10b.Scn.Fnt
MODULE AmigaDiskFont;
IMPORT SYSTEM, A := AmigaBase, e := AmigaExec, g := AmigaGraphics;
CONST
diskFontName*="diskfont.library";
maxFontPath * = 256; (* including null terminator *)
FontContentsPtr * = UNTRACED POINTER TO FontContents;
FontContents * = STRUCT
fileName * : ARRAY maxFontPath OF CHAR;
ySize * : INTEGER;
style * : SHORTSET;
flags * : SHORTSET;
END;
TFontContentsPtr * = UNTRACED POINTER TO TFontContents;
TFontContents * = STRUCT
fileName * : ARRAY maxFontPath-2 OF CHAR;
tagCount * : INTEGER;
(*
* if tfc_TagCount is non-zero, tfc_FileName is overlayed with
* Text Tags starting at: (struct TagItem * )
* &tfc_FileName[MAXFONTPATH-(tfc_TagCount*sizeof(struct TagItem))]
*)
ySize * : INTEGER;
style * : SHORTSET;
flags * : SHORTSET;
END;
CONST
fchId * = 00F00H; (* FontContentsHeader, then FontContents *)
tfchId * = 00F02H; (* FontContentsHeader, then TFontContents *)
FontContentsHeaderPtr * = UNTRACED POINTER TO FontContentsHeader;
FontContentsHeader * = STRUCT
fileID * : INTEGER; (* FCH_ID *)
numEntries * : INTEGER; (* the number of FontContents elements *)
(* fc * : ARRAY numEntries OF FontContents or
tfc * : ARRAY numEntries OF TFontContents *)
END;
CONST
dfhId * = 00F80H;
maxFontName * = 32; (* font name including ".font\0" *)
DiskFontHeaderPtr * = UNTRACED POINTER TO DiskFontHeader;
DiskFontHeader * = STRUCT (df * : e.Node) (* node to link disk fonts *)
(* the following 8 bytes are not actually considered a part of the *)
(* DiskFontHeader, but immediately preceed it. The NextSegment is *)
(* supplied by the linker/loader, and the ReturnCode is the code *)
(* at the beginning of the font in case someone runs it... *)
(* ULONG dfh_NextSegment; \* actually a BPTR *)
(* ULONG dfh_ReturnCode; \* MOVEQ #0,D0 : RTS *)
(* here then is the official start of the DiskFontHeader... *)
fileID * : INTEGER; (* DFH_ID *)
revision * : INTEGER; (* the font revision *)
segment * : e.BPTR; (* the segment address when loaded *)
name * : ARRAY maxFontName OF CHAR; (* the font name (null terminated) *)
tf * : g.TextFont; (* loaded TextFont structure *)
END;
CONST
memory * = 0;
disk * = 1;
scaled * = 2;
tagged * = 16; (* return TAvailFont *)
AvailFontPtr * = UNTRACED POINTER TO AvailFont;
AvailFont * = STRUCT
type * : SET; (* MEMORY, DISK, or SCALED *)
attr * : g.TextAttr; (* text attributes for font *)
END;
TAvailFontPtr * = UNTRACED POINTER TO TAvailFont;
TAvailFont * = STRUCT
type * : SET; (* MEMORY, DISK, or SCALED *)
attr * : g.TTextAttr; (* text attributes for font *)
END;
AvailFontsHeaderPtr * = UNTRACED POINTER TO AvailFontsHeader;
AvailFontsHeader * = STRUCT
numEntries * : INTEGER; (* number of AvailFont elements *)
(* af * : ARRAY numEntries OF AvailFont or
taf * : ARRAY numEntries OF TAvailFont *)
END;
diskFontBase*: e.LibraryPtr;
diskFontVersion-:INTEGER;
PROCEDURE OpenDiskFont*(VAR textAttr: g.TextAttr): g.TextFontPtr;
r:A.Regs;
BEGIN
r.a[0] := SYSTEM.ADR(textAttr);
A.LibCall(diskFontBase,-30,r);
RETURN SYSTEM.VAL(g.TextFontPtr, r.d[0])
END OpenDiskFont;
PROCEDURE Init;
LibraryPtr=POINTER TO e.Library;
lib:LibraryPtr;
BEGIN
diskFontBase := e.OpenLibrary(diskFontName,37);
IF diskFontBase=0 THEN HALT(99) END;
lib:=SYSTEM.VAL(LibraryPtr,diskFontBase);
diskFontVersion:=lib.version;
END Init;
BEGIN Init
END AmigaDiskFont.